package com.manage.common.oss;

import cn.hutool.json.JSONUtil;
import com.manage.common.core.result.JsonResult;
import com.manage.common.oss.config.CloudStorageConfig;
import com.manage.common.oss.constants.CloudConstant;
import com.manage.common.oss.convert.StorageConfigCovert;
import com.manage.common.oss.service.AliyunCloudStorageService;
import com.manage.common.oss.service.CloudStorageService;
import com.manage.common.oss.service.QcloudCloudStorageService;
import com.manage.common.oss.service.QiniuCloudStorageService;
import com.manage.system.api.entity.SysStorageConfig;
import com.manage.system.api.feign.RemoteStorageConfig;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;

/**
 * 文件上传Factory
 */
@Component
@AllArgsConstructor
public class OSSFactory {

    private final RemoteStorageConfig remoteStorageConfig;

    public CloudStorageService build(String configCode) {
        // 获取云存储配置信息
        JsonResult jsonResult = remoteStorageConfig.findByConfigCode(configCode);
        SysStorageConfig sysStorageConfig = JSONUtil.toBean(JSONUtil.toJsonStr(jsonResult.getData()), SysStorageConfig.class);
        if (sysStorageConfig.getType().equals(CloudConstant.CloudType.QINIU.getValue())) {
            CloudStorageConfig qiniuConfig = StorageConfigCovert.INSTANCE.toQiniuConfig(sysStorageConfig);
            return new QiniuCloudStorageService(qiniuConfig);
        } else if (sysStorageConfig.getType().equals(CloudConstant.CloudType.ALIYUN.getValue())) {
            CloudStorageConfig aliyunConfig = StorageConfigCovert.INSTANCE.toAliyunConfig(sysStorageConfig);
            return new AliyunCloudStorageService(aliyunConfig);
        } else if (sysStorageConfig.getType().equals(CloudConstant.CloudType.QCLOUD.getValue())) {
            CloudStorageConfig qcloudConfig = StorageConfigCovert.INSTANCE.toQcloudConfig(sysStorageConfig);
            return new QcloudCloudStorageService(qcloudConfig);
        }
        return null;
    }
}
